home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / MISC / HCAL-27 / ACCALC.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1997-03-01  |  8.2 KB  |  317 lines

  1. 10  'ACCALC : A.C. CALCULATOR - 22 APR 94  rev. 27 SEP 96
  2. 20  IF EX$=""THEN EX$="EXIT"
  3. 30  CLS:KEY OFF
  4. 40  ON ERROR GOTO 2900
  5. 50  COLOR 7,0,1
  6. 60  UL$=STRING$(80,205)
  7. 70  U1$="###,###.#"
  8. 80  U2$="###,###.###"
  9. 90  U3$="###,###.##"
  10. 100  PI=3.14159
  11. 110  '
  12. 120  '.....start
  13. 130  CLS
  14. 140  RMS=0:AVG=0:PK=0:I=0:Z=0:PA=0:R=0:XL=0:XC=0
  15. 150  E=0:PR=0:PH=0:PF=0:X=0:F=0:C=0:U=0:PP=0
  16. 160  COLOR 15,2
  17. 170  PRINT " A.C. CALCULATOR";TAB(57);"by George Murphy VE3ERP ";
  18. 180  COLOR 1,0
  19. 190  PRINT STRING$(80,"<0xDF!>");
  20. 200  COLOR 7,0
  21. 210  PRINT " Press number in < > for:"
  22. 220  PRINT UL$;
  23. 230  PRINT "  < 1 >  Ohm's Law for A.C."
  24. 240  PRINT "  < 2 >  Impedance, Power Factor and Phase Angle"
  25. 250  PRINT "  < 3 >  Reactance, Frequency, Capacitance & Inductance (tuned cct.)"
  26. 260  PRINT "  < 4 >  Peak, Peak-to-Peak, RMS & Average voltages"
  27. 270  PRINT UL$;
  28. 280  PRINT "  < 0 >  Return to Main Menu"
  29. 290  Y$=INKEY$
  30. 300  IF Y$="0"THEN CLS:RUN EX$
  31. 310  IF Y$="1"THEN 370
  32. 320  IF Y$="2"THEN 980
  33. 330  IF Y$="3"THEN 1850
  34. 340  IF Y$="4"THEN 2280
  35. 350  GOTO 290
  36. 360  '
  37. 370  '.....ohm's law
  38. 380  CLS
  39. 390  COLOR 15,2
  40. 400  PRINT " OHM's LAW for A.C. "
  41. 410  COLOR 1,0
  42. 420  PRINT STRING$(80,"<0xDF!>");
  43. 430  COLOR 7,0
  44. 440  PRINT " If you do not have the data requested, press <ENTER>...
  45. 450  PRINT UL$;
  46. 460  IF RMS THEN 550
  47. 470  INPUT " ENTER: RMS Voltage.................Erms= ";RMS
  48. 480  GOSUB 670
  49. 490  IF RMS THEN 550
  50. 500  INPUT " ENTER: Average Voltage.............Eavg= ";AVG
  51. 510  GOSUB 670
  52. 520  IF RMS THEN 550
  53. 530  INPUT " ENTER: Peak Voltage................Epk = ";PK
  54. 540  GOSUB 670
  55. 550  IF I THEN 580
  56. 560  INPUT " ENTER: Current (in amperes)..........I = ";I
  57. 570  GOSUB 670
  58. 580  IF Z THEN 610
  59. 590  INPUT " ENTER: Impedance (in ohms))..........Z = ";Z
  60. 600  GOSUB 670
  61. 610  IF PA THEN 640
  62. 620  INPUT " ENTER: Apparent Power (in watts)....Pa = ";PA
  63. 630  GOSUB 670
  64. 640  VIEW PRINT 5 TO 24:CLS:VIEW PRINT:LOCATE 5
  65. 650  GOTO 460
  66. 660  '
  67. 670  '.....calculate
  68. 680  FOR Y=1 TO 5
  69. 690  IF PK=0 AND RMS<>0      THEN PK=RMS*SQR(2):GOTO 850
  70. 700  IF RMS=0 AND PK<>0      THEN RMS=PK/SQR(2):GOTO 850
  71. 710  IF RMS=0 AND PA*Z<>0    THEN RMS=SQR(PA*Z):GOTO 850
  72. 720  IF RMS=0 AND PA*I<>0    THEN RMS=PA/I:GOTO 850
  73. 730  IF AVG=0 AND PK<>0      THEN AVG=2/PI*PK:GOTO 850
  74. 740  IF PK=0 AND AVG<>0      THEN PK=PI/2*AVG:GOTO 850
  75. 750  IF RMS=0 AND I*Z<>0     THEN RMS=I*Z:GOTO 850
  76. 760  IF I=0 AND RMS*Z<>0     THEN I=RMS/Z:GOTO 850
  77. 770  IF I=0 AND PA*Z<>0      THEN I=SQR(PA/Z):GOTO 850
  78. 780  IF I=0 AND PA*RMS<>0    THEN I=PA/RMS:GOTO 850
  79. 790  IF Z=0 AND RMS*I<>0     THEN Z=RMS/I:GOTO 850
  80. 800  IF Z=0 AND PA*I<>0      THEN Z=PA/I^2:GOTO 850
  81. 810  IF Z=0 AND PA*RMS<>0    THEN Z=RMS^2/PA:GOTO 850
  82. 820  IF PA=0 AND I*Z<>0      THEN PA=I^2*Z:GOTO 850
  83. 830  IF PA=0 AND RMS*Z<>0    THEN PA=RMS^2/Z:GOTO 850
  84. 840  IF PA=Z AND RMS*I<>0    THEN PA=RMS*I:GOTO 850
  85. 850  NEXT Y
  86. 860  IF RMS*PK*AVG*I*Z THEN 880
  87. 870  RETURN
  88. 880  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  89. 890  PRINT " AC Voltage (RMS).........";USING U1$;RMS
  90. 900  PRINT " AC Voltage (average).....";USING U1$;AVG
  91. 910  PRINT " AC Voltage (peak)........";USING U1$;PK
  92. 920  PRINT " Current (amperes)........";USING U2$;I
  93. 930  PRINT " Impedance (ohms).........";USING U1$;Z
  94. 940  PRINT " Volt-Amperes (watts).....";USING U1$;PA
  95. 950  PRINT UL$;
  96. 960  GOTO 2990
  97. 970  '
  98. 980  '.....impedance, power factor & phase angle
  99. 990  CLS
  100. 1000  COLOR 15,2
  101. 1010  PRINT " IMPEDANCE, POWER FACTOR & PHASE ANGLE "
  102. 1020  COLOR 1,0
  103. 1030  PRINT STRING$(80,"<0xDF!>");
  104. 1040  COLOR 7,0
  105. 1050  PRINT " If you do not have the data requested, press <ENTER>...
  106. 1060  PRINT UL$;
  107. 1070  '
  108. 1080  IF Z THEN 1110
  109. 1090  INPUT " ENTER: Impedance (ohms)................Z= ";Z
  110. 1100  GOSUB 1430
  111. 1110  IF R THEN 1140
  112. 1120  INPUT " ENTER: DC resistance (ohms)............R= ";R
  113. 1130  GOSUB 1430
  114. 1140  IF XL THEN 1170
  115. 1150  INPUT " ENTER: Inductive reactance (ohms).....Xl= ";XL
  116. 1160  GOSUB 1430
  117. 1170  IF XC THEN 1200
  118. 1180  INPUT " ENTER: Capacitive reactance (ohms)....Xc= ";XC
  119. 1190  GOSUB 1430
  120. 1200  IF E THEN 1230
  121. 1210  INPUT " ENTER: Volts (RMS).....................E= ";E
  122. 1220  GOSUB 1430
  123. 1230  IF I THEN 1260
  124. 1240  INPUT " ENTER: Current (amperes)...............I= ";I
  125. 1250  GOSUB 1430
  126. 1260  IF PA THEN 1290
  127. 1270  INPUT " ENTER: Apparent power (volt-amperes)..Pa= ";PA
  128. 1280  GOSUB 1430
  129. 1290  IF PR THEN 1320
  130. 1300  INPUT " ENTER: True power (watts).............Pr= ";PR
  131. 1310  GOSUB 1430
  132. 1320  IF PH THEN 1360
  133. 1330  INPUT " ENTER: Phase angle (degrees)..........Ph= ";PH
  134. 1340  PH=PH*PI/180      'radians
  135. 1350  GOSUB 1430
  136. 1360  IF PF THEN 1400
  137. 1370  INPUT " ENTER: Power Factor (from 0 to 1).....Pf= ";PF
  138. 1380  IF PF>1 THEN 1370
  139. 1390  GOSUB 1430
  140. 1400  VIEW PRINT 5 TO 24:CLS:VIEW PRINT:LOCATE 5
  141. 1410  GOTO 1080
  142. 1420  '
  143. 1430  '.....calculate
  144. 1440  FOR Y=1 TO 5
  145. 1450  IF Z=0 AND R*XL*XC<>0     THEN Z=SQR(R^2+(XL-XC)^2):GOTO 1630
  146. 1460  IF Z=0 AND R*PF<>0        THEN Z=R/PF:GOTO 1630
  147. 1470  IF R=0 AND Z*XL*XC<>0     THEN R=SQR(Z^2-(XL-XC)^2):GOTO 1630
  148. 1480  IF R=0 AND I*PR<>0        THEN R=PR/I^2:GOTO 1630
  149. 1490  IF R=0 AND Z*PF<>0        THEN R=Z*PF:GOTO 1630
  150. 1500  IF E=0 AND I*Z<>0         THEN E=I*Z:GOTO 1630
  151. 1510  IF E=0 AND I*PA<>0        THEN E=PA/I:GOTO 1630
  152. 1520  IF I=0 AND E*Z<>0         THEN I=E/Z:GOTO 1630
  153. 1530  IF I=0 AND E*PA<>0        THEN I=PA/E:GOTO 1630
  154. 1540  IF I=0 AND R*PR<>0        THEN I=SQR(PR/R):GOTO 1630
  155. 1550  IF PA=0 AND E*I<>0        THEN PA=E*I:GOTO 1630
  156. 1560  IF PA=0 AND PF*PR<>0      THEN PA=PR/PF:GOTO 1630
  157. 1570  IF PR=0 AND I*R<>0        THEN PR=I^2*R:GOTO 1630
  158. 1580  IF PR=0 AND PF*PA<>0      THEN PR=PF*PA:GOTO 1630
  159. 1590  IF PF=0 AND PR*PA<>0      THEN PF=PR/PA:GOTO 1630
  160. 1600  IF PF=0 AND R*Z<>0        THEN PF=R/Z:GOTO 1630
  161. 1610  IF PF=0 AND PH<>0         THEN PF=COS(PH):GOTO 1630
  162. 1620  IF PH=0 AND XL*XC*R<>0    THEN PH=ATN((XL-XC)/R):GOTO 1630
  163. 1630  NEXT Y
  164. 1640  IF R*XL*XC*I*PF THEN 1690
  165. 1650  IF R*Z*PF THEN 1690
  166. 1660  IF PH*PF THEN 1690
  167. 1670  RETURN
  168. 1680  '
  169. 1690  '.....print results
  170. 1700  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  171. 1710  IF Z  THEN PRINT " Impedance (ohms)...............";USING U1$;Z
  172. 1720  IF R  THEN PRINT " DC resistance (ohms)...........";USING U1$;R
  173. 1730  IF XL THEN PRINT " Inductive reactance (ohms).....";USING U1$;XL
  174. 1740  IF XC THEN PRINT " Capacitive reactance (ohms)....";USING U1$;XC
  175. 1750  IF E  THEN PRINT " AC Voltage (RMS)...............";USING U1$;E
  176. 1760  IF I  THEN PRINT " Current (amperes)..............";USING U2$;I
  177. 1770  IF PA THEN PRINT " Apparent power (volt-amperes)..";USING U1$;PA
  178. 1780  IF PR THEN PRINT " True power (watts).............";USING U1$;PR
  179. 1790  IF PF THEN PRINT " Power factor...................";USING U2$;PF
  180. 1800  IF PH THEN PH=PH*180/PI
  181. 1810  IF PH THEN PRINT " Phase angle (degrees)..........";USING U2$;PH
  182. 1820  PRINT UL$;
  183. 1830  GOTO 2990
  184. 1840  '
  185. 1850  '.....reactance, frequency, capacitance & inductance
  186. 1860  CLS
  187. 1870  COLOR 15,2:PRINT " REACTANCE, FREQUENCY, CAPACITANCE & INDUCTANCE "
  188. 1880  COLOR 1,0:PRINT STRING$(80,"<0xDF!>");
  189. 1890  COLOR 7,0
  190. 1900  IF X THEN 1930
  191. 1910  INPUT " ENTER: Reactance (ohms).......X= ";X
  192. 1920  GOSUB 2050
  193. 1930  IF F THEN 1960
  194. 1940  INPUT " ENTER: Frequency (MHz)........F= ";F
  195. 1950  GOSUB 2050
  196. 1960  IF C THEN 1990
  197. 1970  INPUT " ENTER: Capacitance (pF).......C= ";C
  198. 1980  GOSUB 2050
  199. 1990  IF U THEN 2020
  200. 2000  INPUT " ENTER: Inductance (>H)........U= ";U
  201. 2010  GOSUB 2050
  202. 2020  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  203. 2030  GOTO 1900
  204. 2040  '
  205. 2050  '.....calculate
  206. 2060  FOR Z=1 TO 3
  207. 2070  IF U=0 AND C*F<>0 THEN U=25330/F^2/C:GOTO 2140
  208. 2080  IF U=0 AND X*F<>0 THEN U=X/(2*PI*F):GOTO 2140
  209. 2090  IF C=0 AND F*U<>0 THEN C=25330/F^2/U:GOTO 2140
  210. 2100  IF F=0 AND C*U<>0 THEN F=SQR(25330/C/U):GOTO 2140
  211. 2110  IF F=0 AND X*U<>0 THEN F=X/(2*PI*U):GOTO 2140
  212. 2120  IF F=0 AND X*C<>0 THEN F=10^6/(2*PI*X*C):GOTO 2140
  213. 2130  IF X=0 AND F*C<>0 THEN X=10^6/(2*PI*F*C):GOTO 2140
  214. 2140  NEXT Z
  215. 2150  IF U*C*F*X<>0 THEN 2180
  216. 2160  RETURN
  217. 2170  '
  218. 2180  '.....print results
  219. 2190  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  220. 2200  PRINT " Reactance (ohms)..........";USING U2$;X
  221. 2210  PRINT " Frequency (MHz)...........";USING U2$;F
  222. 2220  PRINT " Capacitance (pF)..........";USING U2$;C
  223. 2230  PRINT " Inductance (>H)...........";USING U2$;U
  224. 2240  PRINT UL$;
  225. 2250  X=0:F=0:C=0:U=0
  226. 2260  GOTO 2990
  227. 2270  '
  228. 2280  '.....equivalant voltages
  229. 2290  CLS
  230. 2300  COLOR 15,2
  231. 2310  PRINT " RELATIVE A.C. VOLTAGES "
  232. 2320  COLOR 1,0
  233. 2330  PRINT STRING$(80,"<0xDF!>");
  234. 2340  COLOR 7,0
  235. 2350  PRINT " Press number in < > to select KNOWN voltage:"
  236. 2360  PRINT UL$;
  237. 2370  PRINT "   <1> Peak"
  238. 2380  PRINT "   <2> Peak-to-Peak"
  239. 2390  PRINT "   <3> RMS (Root Mean Square)"
  240. 2400  PRINT "   <4> Average"
  241. 2410  PRINT UL$;
  242. 2420  Z$=INKEY$
  243. 2430  IF Z$="1"THEN 2490
  244. 2440  IF Z$="2"THEN 2570
  245. 2450  IF Z$="3"THEN 2650
  246. 2460  IF Z$="4"THEN 2730
  247. 2470  GOTO 2420
  248. 2480  '
  249. 2490  '.....Peak known
  250. 2500  INPUT " ENTER: Known PEAK voltage";PK
  251. 2510  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  252. 2520  PP=2*PK
  253. 2530  RMS=PK/SQR(2)
  254. 2540  AVG=2/PI*PK
  255. 2550  GOTO 2810
  256. 2560  '
  257. 2570  '.....Peak-to-Peak known
  258. 2580  INPUT " ENTER: Known PEAK-to-PEAK voltage";PP
  259. 2590  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  260. 2600  PK=PP/2
  261. 2610  RMS=PP/2/SQR(2)
  262. 2620  AVG=PP/PI
  263. 2630  GOTO 2810
  264. 2640  '
  265. 2650  '.....RMS known
  266. 2660  INPUT " ENTER: Known RMS voltage";RMS
  267. 2670  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  268. 2680  PK=RMS*SQR(2)
  269. 2690  PP=2*PK
  270. 2700  AVG=PP/PI
  271. 2710  GOTO 2810
  272. 2720  '
  273. 2730  '.....AVERAGE known
  274. 2740  INPUT " ENTER: Known AVERAGE voltage";AVG
  275. 2750  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  276. 2760  PK=PI/2*AVG
  277. 2770  PP=2*PK
  278. 2780  RMS=PK/SQR(2)
  279. 2790  GOTO 2810
  280. 2800  '
  281. 2810  '.....display equivalent values
  282. 2820  VIEW PRINT 3 TO 24:CLS:VIEW PRINT:LOCATE 3
  283. 2830  PRINT " PEAK voltage............";USING U2$;PK
  284. 2840  PRINT " PEAK-to-PEAK voltage....";USING U2$;PP
  285. 2850  PRINT " RMS voltage.............";USING U2$;RMS
  286. 2860  PRINT " AVERAGE voltage.........";USING U2$;AVG
  287. 2870  PRINT UL$;
  288. 2880  GOTO 2990
  289. 2890  '
  290. 2900  '.....error trap
  291. 2910  BEEP:CLS:LOCATE 3
  292. 2920  '
  293. 2930  PRINT " You may have entered something that is not valid or possible...."
  294. 2940  PRINT
  295. 2950  PRINT " Press any key to start over....."
  296. 2960  IF INKEY$=""THEN 2960
  297. 2970  CLS:GOTO 3010
  298. 2980  '
  299. 2990  '.....end
  300. 3000  GOSUB 3040
  301. 3010  GOTO 120   'start
  302. 3020  END
  303. 3030  '
  304. 3040  'HARDCOPY
  305. 3050  GOSUB 3160:LOCATE 25,2:COLOR 14,6
  306. 3060  PRINT " Press 1 to print screen, 2 to print screen & ";
  307. 3070  PRINT "advance paper, or 3 to continue.";:COLOR 7,0
  308. 3080  Z$=INKEY$:IF Z$="3"THEN GOSUB 3160:RETURN
  309. 3090  IF Z$="1"OR Z$="2"THEN GOSUB 3160:GOTO 3110
  310. 3100  GOTO 3080
  311. 3110  FOR QX=1 TO 24:FOR QY=1 TO 80
  312. 3120  LPRINT CHR$(SCREEN(QX,QY));
  313. 3130  NEXT QY:NEXT QX
  314. 3140  IF Z$="2"THEN LPRINT CHR$(12)
  315. 3150  GOTO 3050
  316. 3160  LOCATE 25,1:PRINT STRING$(80,32);:RETURN
  317.